package com.yl.users.services

import com.alibaba.fastjson.JSONObject
import com.baomidou.mybatisplus.extension.plugins.pagination.Page
import com.yl.common.control.ResponseBody
import com.yl.users.entity.*
import com.yl.users.pojo.vo.CompanyPermissionsViewSelectVo
import com.yl.users.pojo.vo.CompanyUserSelectVo

/**
 * 公司用户类
 */
interface ICompanyUserService {

	/**
	 * 获取用户详情
	 */
	fun getUser(id:Long): CompanyUser?

	/**
	 * 修改用户信息（名字，昵称，电话。上级，类型，性别,帐号）
	 */
	fun updateById(companyUser: CompanyUser):ResponseBody

	/**
	 * 逻辑删除用户
	 */
	fun delUser(userId:Long):ResponseBody

	/**
	 * 获取用户某个部门的角色id列表
	 */
	fun getUserSubCompanyRoleIds(userId: Long,deptId: Long):List<Long>

	/**
	 * 获取用户绑定的分部
	 */
	fun getUserSubCompanyList(userId:Long):List<CompanyLinkSubCompanyDeptUser>

	/**
	 * 获取用户某个分院的角色列表
	 */
	fun getUserSubCompanyRole( userId: Long,deptId: Long):List<CompanyRole>

	/**
	 * 绑定角色(会先绑定一次分院)
	 */
	fun bindRoles(userId:Long,deptId: Long,roleIds:List<Long>):ResponseBody

	/**
	 * 添加角色绑定
	 */
	fun addRoles(userId:Long,roleIds:List<Long>,deptId: Long):ResponseBody

	/**
	 * 解除某个部门的角色绑定
	 */
	fun unBindRoleBySubCompanyId(userId:Long,subCompanyId:Long):ResponseBody

	/**
	 * 登录
	 */
	fun login(loginName:String,password : String):ResponseBody

	/**
	 * 修改密码
	 */
	fun updatePassword(userId: Long,oldPassword:String,newPassword:String):ResponseBody


	/**
	 * 修改密码
	 */
	fun setPassword(user: CompanyUser,newPassword:String):ResponseBody


	/**
	 * 获取单个用户权限列表
	 */
	fun getUserPermList(userId: Long,deptId:Long,vo: CompanyPermissionsViewSelectVo):List<CompanyPermissionsView>

	/**
	 * 获取用户菜单列表
	 */
	fun getUserMenuTree(userId: Long,deptId:Long):List<CompanyPermissionsView>

//	/**
//	 * 获取用户菜单下按钮权限
//	 */
//	fun getUserButtonPerm(userId:Long,deptId:Long,menuId:Long):List<CompanyPermissionsDto>

	/**
	 * 返回指定用户发送通知消息的配置内容.
	 * 如果为null.则指明不能使用发送
	 */
	fun sendNoticeConfig(companyId: Long,userId: Long, name: String): JSONObject?

	/**
	 * 替换缓存某个公司的信息
	 */
	fun replaceCacheCompany(company: SysCompany)

	/**
	 * 清除某个缓存用户信息
	 * @param companyId
	 * @param userId
	 */
	fun removeCacheUser(companyId: Long, userId: Long)


	/**
	 * 获取缓存公司
	 * @param companyId
	 * @param userId
	 * @return
	 */
	fun getCacheCompany(companyId: Long): SysCompany?

	/**
	 * 获取缓存用户
	 * @param companyId
	 * @param userId
	 * @return
	 */
	fun getCacheUser(companyId: Long, userId: Long): CompanyUser?


	/**
	 * 获取用户绑定的权限
	 * @param companyId
	 * @param userId
	 * @return
	 */
	fun getCachePermissionsSet(companyId: Long, userId: Long,subCompanyId: Long): Set<String>?

	/**
	 * 获取是否有权限
	 * @param companyId
	 * @param userId
	 * @param permCode
	 * @return
	 */
	fun havePermCode(companyId: Long, userId: Long, permCode: String,deptId: Long): Boolean

	/**
	 * 清除某个公司的缓存
	 */
	fun cleanCacheByCompany(companyId: Long)

	/**
	 * 切换分院
	 */
	fun switchSubCompany(subCompanyId:Long): ResponseBody

	/**
	 * 添加代办事项
	 */
	fun addTodo(companyUserTodo: CompanyUserTodo):ResponseBody

	/**
	 * 分页查询
	 */
	fun page(page: Page<CompanyUserTodo>,companyUserTodo: CompanyUserTodo):Page<CompanyUserTodo>

	/**
	 * 获取下级用户
	 */
	fun getSubUserList(userId: Long,companyId: Long,vo:CompanyUserSelectVo):List<CompanyUser>

	/**
	 * 用户是否还在分院的部门下面
	 */
	fun userIsInSubCompanyDept(subCompanyId: Long,userId: Long):Boolean
}
